package com.situ.mall.common.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.situ.mall.common.entity.Attachment;
import com.situ.mall.common.mapper.AttachmentMapper;
import com.situ.mall.common.service.IAttachmentService;
import com.situ.mall.common.vo.ResultVO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.time.LocalDateTime;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author JavaWizard
 * @since 2023-09-15
 */
@Service
public class AttachmentServiceImpl extends ServiceImpl<AttachmentMapper, Attachment> implements IAttachmentService {

    //文件的访问路径
    @Value("${file.path}")
    private String filePath;

    //文件保存在硬盘上的地址
    @Value("${file.location}")
    private String fileLocation;

    //单附件上传（首页图）把上传文件保存到本地，同时返回访问路径
    @Override
    public ResultVO uploadOne(MultipartFile file) {
        //打印文件名
        System.out.println(file.getOriginalFilename());

        ResultVO vo = new ResultVO();
        //给传进去的文件造个新名字，避免重名
        String newFileName = System.currentTimeMillis()
                //从最后一个.开始，向后截取后缀名
                + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        try {
            File f = new File(fileLocation + newFileName);
            //1.把文件保存到本地硬盘上的对应目录中
            file.transferTo(f);

            //2.返回该文件的访问路径
            vo.setData(filePath + newFileName);
        }catch (Exception e){
            vo.setMsg("上传文件失败");
        }
        return vo;
    }

    //多附件上传（详图）保存至数据库
    @Override
    public ResultVO upload(MultipartFile file) {
        //打印文件名
        System.out.println(file.getOriginalFilename());

        ResultVO vo = new ResultVO();
        //给传进去的文件造个新名字，避免重名
        String newFileName = System.currentTimeMillis()
                //从最后一个.开始，向后截取后缀名
                + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        try {
            File f = new File(fileLocation + newFileName);
            //1.把文件保存到本地硬盘上的对应目录中
            file.transferTo(f);

            //2.保存该文件的相关数据到attachment表
            Attachment att = new Attachment();
            att.setCreateTime(LocalDateTime.now());//获取上传时间
            att.setFilePath(filePath + newFileName);//获取新文件名
            att.setFileName(file.getOriginalFilename());//获取老文件名
            att.setFileSize(file.getSize());//获取文件大小（字节数）
            baseMapper.upload(att);

            //3.返回该文件的所有相关数据
            vo.setData(att);
        }catch (Exception e){
            vo.setMsg("上传文件失败");
        }
        return vo;
    }

    //更新附件相关数据
    @Override
    public void bind(String attIds, Integer id, String source) {
        //string.split(regex),该方法将一个字符串按照指定字符进行分割，返回的结果是一个字符串数组
        baseMapper.bind(attIds.split(","), id, source);
    }

    //清理数据库中的脏数据
    @Override
    public void clean() {
        System.out.println("service去清理了");
    }


}
